www.gusucode.com > HookAPI开发包(Win32 API函数截拦)源码程序 > HookAPI开发包(Win32 API函数截拦)源码程序/谷速代码-code/HookAPI1.7/samples/to_test/KillADDll/util.cpp
#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <winsock.h> #include "resource.h" #include "util.h" extern HINSTANCE g_hInstance; void GetFileName(char *fname) { char temp[200]; GetModuleFileName(NULL, temp, sizeof(temp)); int i =strlen(temp); while(i >0 && temp[i-1] !='\\' && temp[i-1] !=':') i--; strcpy(fname, &temp[i]); strupr(fname); } /* void WriteLog(char *fmt,...) { FILE *fp; va_list args; char modname[200]; if((fp =fopen("c:\\hookapi.log", "a")) !=NULL) { va_start(args,fmt); GetModuleFileName(NULL, modname, sizeof(modname)); fprintf(fp, "mydll.dll:%s:", modname); vfprintf(fp, fmt, args); fprintf(fp, "\n"); fclose(fp); va_end(args); } } */ void WriteLog(char *fmt,...)//Modified by liuxiang { va_list args; char modname[200]; char temp[5000]; HANDLE hFile; GetModuleFileName(NULL, modname, sizeof(modname)); if((hFile =CreateFile("c:\\hookapi.log", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)) <0) { return; } _llseek((HFILE)hFile, 0, SEEK_END); wsprintf(temp, "mydll.dll:%s:", modname); DWORD dw; WriteFile(hFile, temp, strlen(temp), &dw, NULL); va_start(args,fmt); vsprintf(temp, fmt, args); va_end(args); WriteFile(hFile, temp, strlen(temp), &dw, NULL); wsprintf(temp, "\n"); WriteFile(hFile, temp, strlen(temp), &dw, NULL); _lclose((HFILE)hFile); } int ipcmp(char *szip1, char *szip2) { ULONG ip1 =GetIntIP(szip1); ULONG ip2 =GetIntIP(szip2); if(ip1 > ip2) return 1; else if(ip1 <ip2) return -1; else return 0; } ULONG GetIntIP(char *szip) { char *p, *p1; char ip[16]; int i; ULONG ii[4]; i =0; strcpy(ip, szip); p =ip; while(*p && i<4) { p1 =p; while(*p && *p !='.') p++; *p =0; ii[i] =my_atoi(p1); p ++; i++; } return ii[0]*256*256*256+ii[1]*256*256+ii[2]*256+ii[3]; } ULONG my_atoi(char *p) { ULONG i; i =0; while(*p) { i =(i+*p-'0')*10; p++; } i =i/10; return i; } BOOL CALLBACK PasswordDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { static PASSWORD_DATA *pdata; char password[9]; switch(msg) { case WM_INITDIALOG: pdata =(PASSWORD_DATA *)lParam; SetDlgItemText(hDlg, IDC_APP_NAME, pdata->app_name); SetDlgItemText(hDlg, IDC_IP, pdata->ip); SetWindowPos(hDlg, NULL, 300, 300, 0, 0, SWP_NOSIZE); SendDlgItemMessage(hDlg, IDE_PASSWORD, EM_SETLIMITTEXT, 8, 0L); break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: GetDlgItemText(hDlg, IDE_PASSWORD, password, sizeof(password)); if(strcmp(password, pdata->password) !=0) { MessageBox(hDlg, "密码不对", pdata->app_name, MB_OK); return TRUE; } EndDialog(hDlg, IDOK); break; case IDCANCEL: EndDialog(hDlg, IDCANCEL); } break; } return FALSE; } int CheckPassword(char *app, char *ip, char *password) { PASSWORD_DATA data; strcpy(data.app_name, app); strcpy(data.ip, ip); strcpy(data.password, password); if(DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_PASSWORD), NULL, PasswordDlgProc, (LONG)&data) ==IDCANCEL) return -1; return 0; } int EncURL(unsigned char *url, int len, char *new_url) { int k =0; for(int i =0; i<len; i++) { if(url[i] >127) { wsprintf(&new_url[k], "%%%2X", url[i]); k +=3; } else new_url[k++] =url[i]; } new_url[k] =0; return k; } int FindData(unsigned char *data1, int len1, unsigned char *data2, int len2, int enc_url) { int i, len_url; char url[1024]; //unsigned char *data =new BYTE[len2]; int count =0; int pos[256], len[256], pos3[256], len3[256]; int k =0; pos [0] =0; len [0] =0; char *p =(char *)data2; for(i =0; i<len2; i++) { if(p[i] !=',') len[k] ++; else { k++; pos[k] =i+1; len[k] =0; } } count =k+1; if(enc_url) { len_url =EncURL(data2, len2, url); k =0; pos3[0] =0; len3[0] =0; char *p =url; for(i =0; i<len_url; i++) { if(p[i] !=',') len3[k] ++; else { k++; pos3[k] =i+1; len3[k] =0; } } } else len_url =len2; //WriteLog("url =%s,len_url=%d\ndata1=%s\n####len1=%d", url,len_url, data1,len1); i =0; while(i+len_url<=len1) { for(k =0; k<count; k++) { if(len[k] && memcmp(data1+i, data2+pos[k], len[k]) ==0) return i; } if(enc_url) { for(k =0; k<count; k++) { if(len3[k] && memcmp(data1+i, url+pos3[k], len3[k]) ==0) return i; } } i++; } //WriteLog("not found!!!"); //delete data; return -1; } //加密例子:使用异或,输出长度不变。 int EncryptData(int algrithm, char *password, unsigned char *inbuf, int inbuf_len, unsigned char *outbuf, int *outbuf_len) { int i; for(i =0; i<inbuf_len-1; i++) { outbuf[i] =inbuf[i]^password[i%8]; } *outbuf_len =inbuf_len; return *outbuf_len; } int DecryptData(int algrithm, char *password, unsigned char *inbuf, int inbuf_len, unsigned char *outbuf, int *outbuf_len) { int i; for(i =0; i<inbuf_len; i++) { outbuf[i] =inbuf[i]^password[i%8]; } *outbuf_len =inbuf_len; return *outbuf_len; } char *upper_case(char *p, int len) { for(int i =0; i<len; i++) { if(p[i] <='a' && p[i] >='z') p[i] =p[i]+'A'-'a'; } return p; } int mreplace(char *buf, int len, char *str, char c) { if(len <=0) return NULL; int f_found =false; for(int i =0; i<len-(int)strlen(str); i++) { if(strnicmp(&buf[i], str, strlen(str))==0) { if(c) memset(&buf[i], c, strlen(str)); f_found =true; //WriteLog("foundddddddddddddddddd,%d,%s", i,&buf[i]); } } return f_found; } int GetLocalPortBySocket(SOCKET s) { struct sockaddr name; int namelen =sizeof(name); getsockname(s, &name, &namelen); return ntohs(((struct sockaddr_in *)&name)->sin_port); } int GetLocalIPBySocket(SOCKET s, char *ip) { struct sockaddr name; int namelen =sizeof(name); getsockname(s, &name, &namelen); strcpy(ip, inet_ntoa(((struct sockaddr_in *)&name)->sin_addr)); return 0; } int GetRemotePortBySocket(SOCKET s) { struct sockaddr name; int namelen =sizeof(name); getpeername(s, &name, &namelen); return ntohs(((struct sockaddr_in *)&name)->sin_port); } int GetRemoteIPBySocket(SOCKET s, char *ip) { struct sockaddr name; int namelen =sizeof(name); getpeername(s, &name, &namelen); strcpy(ip, inet_ntoa(((struct sockaddr_in *)&name)->sin_addr)); return 0; }